//
//  HBTabBar.swift
//  HBWeibo
//
//  Created by Beans on 16/6/23.
//  Copyright © 2016年 iceWorks. All rights reserved.
//

import UIKit

class HBTabBar: UITabBar {

    // 1. 定义闭包
    var closure:(()->())?

    // 添加子控件 init
    // 重写父类的方法
    // init(frame:) -- 是 UIView的指定构造方法
    override init(frame: CGRect) {
        super.init(frame: frame)
        // 添加按钮
        addSubview(composeButton)
    }

    // 加载storyboard时调用. 系统提示, 如果从storyboard加载, 会有一个崩溃提示
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

    override func layoutSubviews() {
        super.layoutSubviews()

        // 定于索引, 用于记录 子控件x
        var index: Int = 0
        // 设置item的宽高
        let width = bounds.width / 5
        let height = bounds.height
        // 通过遍历拿到 subviews
        for subview in subviews {
//            printLog(subview)

            // UITabBarButton 是系统的私有类, 不对外公开
            // isKindOfClass 用于判断 是不是 这个类
            // UITabBarButton 怎么和AnyClass对应
            // NSClassFromString("UITabBarButton")! 为什么要强制解包?
            if subview.isKindOfClass(NSClassFromString("UITabBarButton")!) {
//                printLog("UITabBarItem")
                // 修改frame
                subview.frame = CGRectMake(CGFloat(index) * width, 0, width, height)
                index++

                if index == 2 {index++}
            }
        }

        // 设置button位置
        composeButton.frame = CGRectMake(2 * width, 0, width, height)
    }

    // MARK: - 懒加载
    // 一般, 建议指定控件类型
    // 建议直接定义为私有的
    private lazy var composeButton: UIButton = {
        let button = UIButton(type: .Custom)
        // 设置属性
        button.setBackgroundImage(UIImage(named: "tabbar_compose_button"), forState: .Normal)
        button.setBackgroundImage(UIImage(named: "tabbar_compose_button_highlighted"), forState: .Highlighted)
        button.setImage(UIImage(named: "tabbar_compose_icon_add"), forState: .Normal)
        button.setImage(UIImage(named: "tabbar_compose_icon_add_highlighted"), forState: .Highlighted)
        // 注册事件
        button.addTarget(self, action: "click:", forControlEvents: .TouchUpInside)
        return button
    }()

    // 注意: 把方法定义为私有的, 运行时的过程中, 类找不到, 需要用'@objc'关键字
    @objc private func click(button: UIButton) {
        printLog("middle button clicked")
        // 2. 调用闭包
        closure?()
    }
}
